using System.Collections.Generic;
using System.Linq;
using M0;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class Demo存钱罐 : BaseWindow
{
    [SerializeField]private Text 现在多少钱Text;
    [SerializeField]private GameObject 现在多少钱obj;
    [SerializeField]private Slider 现在多少钱进度条;
    [SerializeField]private GameObject 灰色按钮;
    [SerializeField]private GameObject 领取按钮;
    [SerializeField]private List<int> 领取节点;
    [SerializeField]private List<Text> 领取节点Text;
    
    
    [SerializeField]private Transform 动画播放金币节点;
    [SerializeField]private Transform 动画播放金币Icon;
    [SerializeField]private List<Image> 动画播放金币;
    
    
    [SerializeField]private Transform test目的地;
    [SerializeField]private GameObject test目的节点;

    private void Awake()
    {
        //初始化
        for (int i = 0; i < 领取节点Text.Count; i++)
        {
            if (领取节点.Count <= i)
            {
                领取节点Text[i].gameObject.SetActive(false);
                break;
            }

            领取节点Text[i].text = $"{领取节点[i]}";
        }
        
        MyEvent.Instance.SetEvent<(Transform, GameObject),string>("Get金币动画目的地", (s) =>
        {
            if (s == "金币")
            {
                return (test目的地, test目的节点);
            }

            return (null, null);
        });
    }


    public override void OpenWindow()
    {
        base.OpenWindow();
        
        现在多少钱obj.transform.localScale=Vector3.zero;
        // 现在多少钱obj.transform.DOScale(Vector3.one,0.5f);//TODO  动画
        现在多少钱obj.transform.localScale=Vector3.one;

        int 存钱 = 缓存存钱.Instance.存钱进度;
        现在多少钱Text.text = 存钱.ToString();
        int 领取档位 = 0;
        foreach (var VARIABLE in 领取节点)
        {
            if (存钱 >= VARIABLE)
            {
                领取档位++;
            }
        }
        
        灰色按钮.SetActive(领取档位 ==0);
        领取按钮.SetActive(领取档位 >0);

        int max档位 = 领取节点.Last();
        float f = (存钱 + 0f) / max档位;

        int 临时 = 缓存存钱.Instance.临时进度备用;
        float 临时f = (临时 + 0f) / max档位;
        现在多少钱进度条.value = 临时f;
        // 现在多少钱进度条.DOValue(f, 0.5f);;//TODO  动画
        现在多少钱进度条.value = f;
        
        缓存存钱.Instance.临时进度备用 = 存钱;
        

    }

    public void 领奖广告()
    {
        M.播放广告("储钱罐", (b) =>
        {
            if (b)
            {
                OnClick领奖();
            }
        });
    }
    
    private void OnClick领奖()
    {
        // 金币目的地,需要将目的地复制显示在上层的节点
        (Transform, GameObject) 金币目的地 =(null,null);
        金币目的地 = MyEvent.Instance.DoFuncEvent<(Transform, GameObject),string>("Get动画目的地","金币");
        //TODO 需要在主界面进行添加事件
        // MyEvent.Instance.SetEvent<(Transform, GameObject)>("Get金币动画目的地", () => { return (Transform, GameObject); });

        // 现在多少钱进度条.DOValue(0, 0.5f);
        现在多少钱进度条.value = 0;
        
        灰色按钮.gameObject.SetActive(true);
        领取按钮.SetActive(false);
        现在多少钱Text.text = "";
        int 加钱 = 缓存存钱.Instance.存钱进度;
        缓存存钱.Instance.存钱进度 = 0;
        CloseWindow();
        
        获得奖励动画.Instance.SetUpPlay动画(动画播放金币Icon, 金币目的地.Item1, 金币目的地.Item2, 
            动画播放金币.Select(s=>s.sprite).ToList(), 动画播放金币.Select(s=>s.rectTransform.sizeDelta).ToList(),null, () =>
            {
                // u.AddToken(加钱, Enum货币.金币, false, false);
                MyEvent.Instance.DoEvent("加金币",加钱);
                缓存存钱.Instance.及时保存数据();
            });

    }

    [ContextMenu("测试加钱")]
    public void 测试价钱()
    {
        缓存存钱.Instance.存钱进度 = 500;
        缓存存钱.Instance.及时保存数据();
    }
}
